<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>User-Thread</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/User-Thread"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-User-Thread rootpage-User-Thread skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">User-Thread</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Als <b>User-Thread</b> (auch <i>Userthread</i> geschrieben), gelegentlich auch <b><a href="Userspace" class="mw-redirect" title="Userspace">Userlevel</a>-Thread</b> und z. B. unter <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> <i><b>Fiber</b></i> (<a href="#Implementierungen">s. u.</a>) genannt, wird in der <a href="Informatik" title="Informatik">Informatik</a> eine bestimmte Art, <a href="Computerprogramm" title="Computerprogramm">Programme</a> bzw. <a href="Unterprogramm" title="Unterprogramm">Programmteile</a> verzahnt ablaufen zu lassen, bezeichnet. Die Funktionalität ist dabei nicht direkt im <a href="Kernel_(Betriebssystem)" title="Kernel (Betriebssystem)">Kernel</a> implementiert (wie bei einem <a href="Thread_(Informatik)" title="Thread (Informatik)">Kernel-Thread</a>), sondern in einer separaten <a href="Programmbibliothek" title="Programmbibliothek">Programmbibliothek</a>, die im <a href="Userspace" class="mw-redirect" title="Userspace">Userspace</a> liegt.<sup id="cite_ref-Richter99_1-0" class="reference"><a href="#cite_note-Richter99-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Dadurch ist ein <a href="Kontextwechsel" title="Kontextwechsel">Kontextwechsel</a> (Taskswitching) zwischen den Userthreads ohne aufwendige Systemaufrufe möglich, wodurch Kontextwechsel deutlich schneller sind als zwischen Kernelthreads oder <a href="Prozess_(Informatik)" title="Prozess (Informatik)">Prozessen</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Scheduling">Scheduling</h2></div>
<p>Da die User-Threads innerhalb eines <a href="Thread_(Informatik)" title="Thread (Informatik)">Kernel-Threads</a> prinzipiell nicht gleichzeitig ([pseudo-]parallel), sondern nur nacheinander ausgeführt werden, können die User-Threads nicht sinnvoll auf mehrere <a href="Prozessor" title="Prozessor">Prozessoren</a> verteilt werden. Da das <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a> nichts von der Existenz der User-Threads weiß, muss das <a href="Scheduling#Scheduling_in_der_Informatik" title="Scheduling">Scheduling</a> (Zeitablaufsteuerung) der User-Threads vom <a href="Computerprogramm" title="Computerprogramm">Programm</a> selbst beziehungsweise von der eingesetzten <a href="Programmbibliothek" title="Programmbibliothek">Programmbibliothek</a> erledigt werden. Dabei wird praktisch immer <a href="Multitasking#Kooperatives_Multitasking" title="Multitasking"><i>kooperatives</i> Scheduling</a> betrieben und nicht <i><a href="Multitasking#Präemptives_Multitasking" title="Multitasking">präemptives</a></i> (von <a href="Englische_Sprache" title="Englische Sprache">engl.</a> <i><span lang="la">preemptive</span></i>, ‚bevorrechtigt‘). Die User-Threads müssen also von sich aus die Kontrolle abgeben.
</p><p>Dies ist allerdings dann problematisch, wenn einer der User-Threads einen blockierenden <a href="Systemaufruf" title="Systemaufruf">Systemaufruf</a> tätigt. Dadurch, dass dieser User-Thread blockiert ist, wird es ihm unmöglich, die Kontrolle an einen anderen User-Thread abzugeben – auf diese Weise wird das gesamte Programm blockiert. Dieses Problem kann jedoch umgangen werden, indem die genutzte Bibliothek dem User-Thread Ersatzfunktionen bereitstellt. Die Bibliothek nutzt dann ausschließlich nichtblockierende Systemaufrufe des Betriebssystems, die dieses bereitstellen muss.
</p>
<div class="mw-heading mw-heading2"><h2 id="Andere_Sichtweise">Andere Sichtweise</h2></div>
<p>Das Konzept der User-Threads kann auch als Erweiterung der Konzepte von <a href="Prozedur_(Programmierung)" title="Prozedur (Programmierung)">Prozeduren</a> oder <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> in entsprechenden <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> gesehen werden. Ein User-Thread entspricht nach dieser Sichtweise einer Prozedur, die von anderer Stelle aufgerufen wird (über das explizite <a href="#Scheduling">Scheduling</a> genau dieses User-Threads). Eine solche Prozedur kehrt jedoch nicht unbedingt an genau einer Stelle zum Kontrollfluss des Aufrufers zurück, sondern kann vielmehr über ihr selbst durchgeführtes Scheduling auch mehr als einmal und an verschiedene Stellen „zurückkehren“. Diese Sichtweise spiegelt sich auch in der Art wider, wie in einigen Systemen User-Threads deklariert werden – nämlich als eine gesonderte Prozedur je User-Thread.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementierungen">Implementierungen</h2></div>
<p>User-Thread-<a href="Programmbibliothek" title="Programmbibliothek">Bibliotheken</a> stehen unter vielen <a href="Betriebssystem" title="Betriebssystem">Betriebssystemen</a> zur Verfügung, aber auch <a href="Interpreter" title="Interpreter">Interpreter</a> können User-Threads unterstützen. Dabei unterscheidet sich die Benennung der User-Threads je nach <a href="Implementierung#Softwaretechnik" title="Implementierung">Implementierung</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Windows">Windows</h3></div>
<p><a href="Microsoft" title="Microsoft">Microsoft</a> nennt die von ihr (seit <i><a href="Microsoft_Windows_98" title="Microsoft Windows 98">Windows 98</a></i>) unter <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> angebotenen User-Threads <i><b>Fibers</b></i>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Das <a href="Englische_Sprache" title="Englische Sprache">englische</a> Wort <i><span lang="en">fiber</span></i> (<a href="Deutsche_Sprache" title="Deutsche Sprache">dt.</a> ‚Faser‘ → ‚Fiber‘) kann hier als Anlehnung an das natürliche Verhältnis eines <i><span lang="en">thread</span></i> (englisch) – d. h. eines <a href="Faden" title="Faden">Fadens</a> – zu einer <i><span lang="en">fiber</span></i>/<a href="Faser" title="Faser">Faser</a> verstanden werden: Eine Faser/Fiber ist dünner und einfacher als ein Faden (Thread); ein Faden kann aus mehreren einzelnen Fasern gesponnen sein. Ein Thread kann unter Windows in einen Fiber konvertiert werden und umgekehrt.<sup id="cite_ref-Richter99_1-1" class="reference"><a href="#cite_note-Richter99-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Linux">Linux</h3></div>
<p>User-Threads bieten unter <a href="Linux" title="Linux">Linux</a> zum Beispiel die <a href="Programmbibliothek" title="Programmbibliothek">Bibliotheken</a> <i><b>LinuxThreads</b></i> und <i><b>GNU Portable Threads</b></i>. <i>LinuxThreads</i> wird allerdings nicht mehr weiterentwickelt, und sein Nachfolger <i><a href="Native_POSIX_Thread_Library" title="Native POSIX Thread Library">Native POSIX Thread Library</a></i> (NPTL) ist keine reine <a href="Userspace" class="mw-redirect" title="Userspace">Userspace</a>-Bibliothek mehr.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Solaris">Solaris</h3></div>
<p>Die <a href="Namenskonvention_(Datenverarbeitung)" title="Namenskonvention (Datenverarbeitung)">Namenskonvention</a> unter <a href="Solaris_(Betriebssystem)" title="Solaris (Betriebssystem)">Solaris</a> weicht von der unter <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> und <a href="Linux" title="Linux">Linux</a> ab. Ein Kernel-Thread wird hier als <i><b><span lang="en">Lightweight process</span></b></i> (<a href="Englische_Sprache" title="Englische Sprache">engl.</a>; ‚leichtgewichtiger Prozess‘ → vgl. <a href="Thread_(Informatik)" title="Thread (Informatik)">Thread (Informatik)</a>) bezeichnet und ein User-Thread schlicht <i><b><span lang="en">thread</span></b></i> genannt.<br>
Ein Solaris-Thread kann auch anderen <i><span lang="en">lightweight processes</span></i> desselben <a href="Prozess_(Informatik)" title="Prozess (Informatik)">Prozesses</a> zugeordnet werden.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Java_Virtual_Machine">Java Virtual Machine</h3></div>
<p>Neuere Versionen der <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> (JVM) nutzen, falls vorhanden, die Möglichkeiten des lokalen <a href="Betriebssystem" title="Betriebssystem">Betriebssystems</a>, um dem Programmierer Threads zur Verfügung zu stellen. Bei älteren Versionen oder falls das Betriebssystem <a href="Thread_(Informatik)" title="Thread (Informatik)">Kernel-Threads</a> nicht unterstützt, hat die JVM aber auch ihre eigene User-Thread-Funktionalität. Diese wird als <i><b>Green Thread</b></i> bezeichnet. <i>Green Threads</i> sind echte User-Threads, bieten aber trotzdem <a href="Multitasking#Präemptives_Multitasking" title="Multitasking">präemptives</a>, prioritätsbasiertes <a href="Scheduling#Scheduling_in_der_Informatik" title="Scheduling">Scheduling</a>, das durch die JVM realisiert wird.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li><a href="Andrew_S._Tanenbaum" title="Andrew S. Tanenbaum">Andrew S. Tanenbaum</a>: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Modern Operating Systems</cite>. Prentice Hall, Englewood Cliffs, New Jersey 1992, ISBN 0-13-595752-4, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>515–518</span> (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:User-Thread&rft.au=Andrew+S.+Tanenbaum&rft.btitle=Modern+Operating+Systems&rft.date=1992&rft.genre=book&rft.isbn=0135957524&rft.pages=515-518&rft.place=Englewood+Cliffs%2C+New+Jersey&rft.pub=Prentice+Hall" style="display:none"> </span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>Ralf S. Engelschall: <a rel="nofollow" class="external text" href="http://www.engelschall.com/pw/usenix/2000/pmt-html/"><i><span lang="en">Portable Multithreading</span>.</i></a> (<a href="PostScript" title="PostScript">PS</a>; 132 <a href="Kilobyte" class="mw-redirect" title="Kilobyte">kB</a>) – Implementierung von User-Threads auf <a href="Unix" title="Unix">Unix</a>-Systemen (englisch); abgerufen am 6. Februar 2014.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-Richter99-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-Richter99_1-0">a</a></sup> <sup><a href="#cite_ref-Richter99_1-1">b</a></sup></span> <span class="reference-text">Jeffrey Richter: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Programming Applications for Microsoft Windows</cite>. 4. Auflage. Microsoft Press, Redmond 1999, ISBN 1-57231-996-8, Chapter 12: Fibers, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>417–420</span> (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abookitem&rfr_id=info:sid/de.wikipedia.org:User-Thread&rft.atitle=Chapter+12%3A+Fibers&rft.au=Jeffrey+Richter&rft.btitle=Programming+Applications+for+Microsoft+Windows&rft.date=1999&rft.edition=4&rft.genre=bookitem&rft.isbn=1572319968&rft.pages=417-420&rft.place=Redmond&rft.pub=Microsoft+Press" style="display:none"> </span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.cprogramming.com/tutorial/opengl_windows_programming.html"><i>Introduction to Windows Programming and OpenGL.</i></a> In: <i>cprogramming.com.</i><span class="Abrufdatum"> Abgerufen am 26. September 2025</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUser-Thread&rft.title=Introduction+to+Windows+Programming+and+OpenGL&rft.description=Introduction+to+Windows+Programming+and+OpenGL&rft.identifier=https%3A%2F%2Fwww.cprogramming.com%2Ftutorial%2Fopengl_windows_programming.html&rft.language=en"> </span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite">Vikram Shukla: <a rel="nofollow" class="external text" href="https://cs.uns.edu.ar/~jechaiz/sosd/clases/extras/03-LinuxThreads%20and%20NPTL.pdf"><i>Linux threading models compared: LinuxThreads and NPTL.</i></a> (PDF; 50 kB) In: <i>cs.uns.edu.ar.</i> IBM, Juli 2006,<span class="Abrufdatum"> abgerufen am 31. Mai 2019</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUser-Thread&rft.title=Linux+threading+models+compared%3A+LinuxThreads+and+NPTL&rft.description=Linux+threading+models+compared%3A+LinuxThreads+and+NPTL&rft.identifier=https%3A%2F%2Fcs.uns.edu.ar%2F%7Ejechaiz%2Fsosd%2Fclases%2Fextras%2F03-LinuxThreads%2520and%2520NPTL.pdf&rft.creator=Vikram+Shukla&rft.publisher=IBM&rft.date=2006-07&rft.language=en"> </span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite">Fabian Zabatta, Kevin Ying: <a rel="nofollow" class="external text" href="https://www.usenix.org/legacy/publications/library/proceedings/usenix-nt98/full_papers/zabatta/zabatta_html/zabatta.html"><i>A Thread Performance Comparison: Windows NT and Solaris on A Symmetric Multiprocessor.</i></a> 2nd USENIX Windows NT Symposium, 03.–05.08.1998. In: <i>usenix.org.</i> USENIX Association, 10. April 2002,<span class="Abrufdatum"> abgerufen am 6. Februar 2014</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUser-Thread&rft.title=A+Thread+Performance+Comparison%3A+Windows+NT+and+Solaris+on+A+Symmetric+Multiprocessor.&rft.description=A+Thread+Performance+Comparison%3A+Windows+NT+and+Solaris+on+A+Symmetric+Multiprocessor.&rft.identifier=https%3A%2F%2Fwww.usenix.org%2Flegacy%2Fpublications%2Flibrary%2Fproceedings%2Fusenix-nt98%2Ffull_papers%2Fzabatta%2Fzabatta_html%2Fzabatta.html&rft.creator=Fabian+Zabatta%2C+Kevin+Ying&rft.publisher=USENIX+Association&rft.date=2002-04-10&rft.language=en"> </span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite">Glenn L. Vanderburg et al.: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090525141834/http://docs.rinet.ru/JaTricks/ch6.htm"><i>Tricks of the Java Programming Gurus.</i></a> Archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fdocs.rinet.ru%2FJaTricks%2Fch6.htm">Original</a></span> am <span style="white-space:nowrap;">25. Mai 2009</span><span>;</span><span class="Abrufdatum"> abgerufen am 14. April 2018</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUser-Thread&rft.title=Tricks+of+the+Java+Programming+Gurus&rft.description=Tricks+of+the+Java+Programming+Gurus&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20090525141834%2Fhttp%3A%2F%2Fdocs.rinet.ru%2FJaTricks%2Fch6.htm&rft.creator=Glenn+L.+Vanderburg+et%26nbsp%3Bal.&rft.source=http://docs.rinet.ru/JaTricks/ch6.htm&rft.language=en"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-09-26" href="https://de.wikipedia.org/wiki/?title=User-Thread&oldid=260078831">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>